# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# NOTE: This file is auto generated by the elixir code generator program.
# Do not edit this file manually.

defmodule GoogleApi.WalletObjects.V1.Model.EventTicketObject do
  @moduledoc """


  ## Attributes

  *   `barcode` (*type:* `GoogleApi.WalletObjects.V1.Model.Barcode.t`, *default:* `nil`) - The barcode type and value.
  *   `appLinkData` (*type:* `GoogleApi.WalletObjects.V1.Model.AppLinkData.t`, *default:* `nil`) - Optional app or website link that will be displayed as a button on the front of the pass. If AppLinkData is provided for the corresponding class only object AppLinkData will be displayed.
  *   `ticketType` (*type:* `GoogleApi.WalletObjects.V1.Model.LocalizedString.t`, *default:* `nil`) - The type of the ticket, such as "Adult" or "Child", or "VIP" or "Standard".
  *   `state` (*type:* `String.t`, *default:* `nil`) - Required. The state of the object. This field is used to determine how an object is displayed in the app. For example, an `inactive` object is moved to the "Expired passes" section.
  *   `groupingInfo` (*type:* `GoogleApi.WalletObjects.V1.Model.GroupingInfo.t`, *default:* `nil`) - Information that controls how passes are grouped together.
  *   `kind` (*type:* `String.t`, *default:* `nil`) - Identifies what kind of resource this is. Value: the fixed string `"walletobjects#eventTicketObject"`.
  *   `hexBackgroundColor` (*type:* `String.t`, *default:* `nil`) - The background color for the card. If not set the dominant color of the hero image is used, and if no hero image is set, the dominant color of the logo is used. The format is #rrggbb where rrggbb is a hex RGB triplet, such as `#ffcc00`. You can also use the shorthand version of the RGB triplet which is #rgb, such as `#fc0`.
  *   `infoModuleData` (*type:* `GoogleApi.WalletObjects.V1.Model.InfoModuleData.t`, *default:* `nil`) - Deprecated. Use textModulesData instead.
  *   `ticketHolderName` (*type:* `String.t`, *default:* `nil`) - Name of the ticket holder, if the ticket is assigned to a person. E.g. "John Doe" or "Jane Doe".
  *   `smartTapRedemptionValue` (*type:* `String.t`, *default:* `nil`) - The value that will be transmitted to a Smart Tap certified terminal over NFC for this object. The class level fields `enableSmartTap` and `redemptionIssuers` must also be set up correctly in order for the pass to support Smart Tap. Only ASCII characters are supported.
  *   `classId` (*type:* `String.t`, *default:* `nil`) - Required. The class associated with this object. The class must be of the same type as this object, must already exist, and must be approved. Class IDs should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you.
  *   `imageModulesData` (*type:* `list(GoogleApi.WalletObjects.V1.Model.ImageModuleData.t)`, *default:* `nil`) - Image module data. The maximum number of these fields displayed is 1 from object level and 1 for class object level.
  *   `merchantLocations` (*type:* `list(GoogleApi.WalletObjects.V1.Model.MerchantLocation.t)`, *default:* `nil`) - Merchant locations. There is a maximum of ten on the object. Any additional MerchantLocations added beyond the 10 will be rejected. These locations will trigger a notification when a user enters within a Google-set radius of the point. This field replaces the deprecated LatLongPoints.
  *   `version` (*type:* `String.t`, *default:* `nil`) - Deprecated
  *   `hasUsers` (*type:* `boolean()`, *default:* `nil`) - Indicates if the object has users. This field is set by the platform.
  *   `locations` (*type:* `list(GoogleApi.WalletObjects.V1.Model.LatLongPoint.t)`, *default:* `nil`) - Note: This field is currently not supported to trigger geo notifications.
  *   `notifyPreference` (*type:* `String.t`, *default:* `nil`) - Whether or not field updates to this object should trigger notifications. When set to NOTIFY, we will attempt to trigger a field update notification to users. These notifications will only be sent to users if the field is part of an allowlist. If set to DO_NOT_NOTIFY or NOTIFICATION_SETTINGS_UNSPECIFIED, no notification will be triggered. This setting is ephemeral and needs to be set with each PATCH or UPDATE request, otherwise a notification will not be triggered.
  *   `textModulesData` (*type:* `list(GoogleApi.WalletObjects.V1.Model.TextModuleData.t)`, *default:* `nil`) - Text module data. If text module data is also defined on the class, both will be displayed. The maximum number of these fields displayed is 10 from the object and 10 from the class.
  *   `linksModuleData` (*type:* `GoogleApi.WalletObjects.V1.Model.LinksModuleData.t`, *default:* `nil`) - Links module data. If links module data is also defined on the class, both will be displayed.
  *   `ticketNumber` (*type:* `String.t`, *default:* `nil`) - The number of the ticket. This can be a unique identifier across all tickets in an issuer's system, all tickets for the event (e.g. XYZ1234512345), or all tickets in the order (1, 2, 3, etc.).
  *   `messages` (*type:* `list(GoogleApi.WalletObjects.V1.Model.Message.t)`, *default:* `nil`) - An array of messages displayed in the app. All users of this object will receive its associated messages. The maximum number of these fields is 10.
  *   `reservationInfo` (*type:* `GoogleApi.WalletObjects.V1.Model.EventReservationInfo.t`, *default:* `nil`) - Reservation details for this ticket. This is expected to be shared amongst all tickets that were purchased in the same order.
  *   `heroImage` (*type:* `GoogleApi.WalletObjects.V1.Model.Image.t`, *default:* `nil`) - Optional banner image displayed on the front of the card. If none is present, hero image of the class, if present, will be displayed. If hero image of the class is also not present, nothing will be displayed.
  *   `seatInfo` (*type:* `GoogleApi.WalletObjects.V1.Model.EventSeat.t`, *default:* `nil`) - Seating details for this ticket.
  *   `hasLinkedDevice` (*type:* `boolean()`, *default:* `nil`) - Whether this object is currently linked to a single device. This field is set by the platform when a user saves the object, linking it to their device. Intended for use by select partners. Contact support for additional information.
  *   `linkedObjectIds` (*type:* `list(String.t)`, *default:* `nil`) - linked_object_ids are a list of other objects such as event ticket, loyalty, offer, generic, giftcard, transit and boarding pass that should be automatically attached to this event ticket object. If a user had saved this event ticket, then these linked_object_ids would be automatically pushed to the user's wallet (unless they turned off the setting to receive such linked passes). Make sure that objects present in linked_object_ids are already inserted - if not, calls would fail. Once linked, the linked objects cannot be unlinked. You cannot link objects belonging to another issuer. There is a limit to the number of objects that can be linked to a single object. After the limit is reached, new linked objects in the call will be ignored silently. Object IDs should follow the format issuer ID. identifier where the former is issued by Google and the latter is chosen by you.
  *   `disableExpirationNotification` (*type:* `boolean()`, *default:* `nil`) - Indicates if notifications should explicitly be suppressed. If this field is set to true, regardless of the `messages` field, expiration notifications to the user will be suppressed. By default, this field is set to false. Currently, this can only be set for offers.
  *   `passConstraints` (*type:* `GoogleApi.WalletObjects.V1.Model.PassConstraints.t`, *default:* `nil`) - Pass constraints for the object. Includes limiting NFC and screenshot behaviors.
  *   `rotatingBarcode` (*type:* `GoogleApi.WalletObjects.V1.Model.RotatingBarcode.t`, *default:* `nil`) - The rotating barcode type and value.
  *   `classReference` (*type:* `GoogleApi.WalletObjects.V1.Model.EventTicketClass.t`, *default:* `nil`) - A copy of the inherited fields of the parent class. These fields are retrieved during a GET.
  *   `valueAddedModuleData` (*type:* `list(GoogleApi.WalletObjects.V1.Model.ValueAddedModuleData.t)`, *default:* `nil`) - Optional value added module data. Maximum of ten on the object.
  *   `linkedOfferIds` (*type:* `list(String.t)`, *default:* `nil`) - A list of offer objects linked to this event ticket. The offer objects must already exist. Offer object IDs should follow the format issuer ID. identifier where the former is issued by Google and latter is chosen by you.
  *   `validTimeInterval` (*type:* `GoogleApi.WalletObjects.V1.Model.TimeInterval.t`, *default:* `nil`) - The time period this object will be `active` and object can be used. An object's state will be changed to `expired` when this time period has passed.
  *   `id` (*type:* `String.t`, *default:* `nil`) - Required. The unique identifier for an object. This ID must be unique across all objects from an issuer. This value should follow the format issuer ID.identifier where the former is issued by Google and latter is chosen by you. The unique identifier should only include alphanumeric characters, '.', '_', or '-'.
  *   `faceValue` (*type:* `GoogleApi.WalletObjects.V1.Model.Money.t`, *default:* `nil`) - The face value of the ticket, matching what would be printed on a physical version of the ticket.
  *   `saveRestrictions` (*type:* `GoogleApi.WalletObjects.V1.Model.SaveRestrictions.t`, *default:* `nil`) - Restrictions on the object that needs to be verified before the user tries to save the pass. Note that this restrictions will only be applied during save time. If the restrictions changed after a user saves the pass, the new restrictions will not be applied to an already saved pass.
  """

  use GoogleApi.Gax.ModelBase

  @type t :: %__MODULE__{
          :barcode => GoogleApi.WalletObjects.V1.Model.Barcode.t() | nil,
          :appLinkData => GoogleApi.WalletObjects.V1.Model.AppLinkData.t() | nil,
          :ticketType => GoogleApi.WalletObjects.V1.Model.LocalizedString.t() | nil,
          :state => String.t() | nil,
          :groupingInfo => GoogleApi.WalletObjects.V1.Model.GroupingInfo.t() | nil,
          :kind => String.t() | nil,
          :hexBackgroundColor => String.t() | nil,
          :infoModuleData => GoogleApi.WalletObjects.V1.Model.InfoModuleData.t() | nil,
          :ticketHolderName => String.t() | nil,
          :smartTapRedemptionValue => String.t() | nil,
          :classId => String.t() | nil,
          :imageModulesData => list(GoogleApi.WalletObjects.V1.Model.ImageModuleData.t()) | nil,
          :merchantLocations => list(GoogleApi.WalletObjects.V1.Model.MerchantLocation.t()) | nil,
          :version => String.t() | nil,
          :hasUsers => boolean() | nil,
          :locations => list(GoogleApi.WalletObjects.V1.Model.LatLongPoint.t()) | nil,
          :notifyPreference => String.t() | nil,
          :textModulesData => list(GoogleApi.WalletObjects.V1.Model.TextModuleData.t()) | nil,
          :linksModuleData => GoogleApi.WalletObjects.V1.Model.LinksModuleData.t() | nil,
          :ticketNumber => String.t() | nil,
          :messages => list(GoogleApi.WalletObjects.V1.Model.Message.t()) | nil,
          :reservationInfo => GoogleApi.WalletObjects.V1.Model.EventReservationInfo.t() | nil,
          :heroImage => GoogleApi.WalletObjects.V1.Model.Image.t() | nil,
          :seatInfo => GoogleApi.WalletObjects.V1.Model.EventSeat.t() | nil,
          :hasLinkedDevice => boolean() | nil,
          :linkedObjectIds => list(String.t()) | nil,
          :disableExpirationNotification => boolean() | nil,
          :passConstraints => GoogleApi.WalletObjects.V1.Model.PassConstraints.t() | nil,
          :rotatingBarcode => GoogleApi.WalletObjects.V1.Model.RotatingBarcode.t() | nil,
          :classReference => GoogleApi.WalletObjects.V1.Model.EventTicketClass.t() | nil,
          :valueAddedModuleData =>
            list(GoogleApi.WalletObjects.V1.Model.ValueAddedModuleData.t()) | nil,
          :linkedOfferIds => list(String.t()) | nil,
          :validTimeInterval => GoogleApi.WalletObjects.V1.Model.TimeInterval.t() | nil,
          :id => String.t() | nil,
          :faceValue => GoogleApi.WalletObjects.V1.Model.Money.t() | nil,
          :saveRestrictions => GoogleApi.WalletObjects.V1.Model.SaveRestrictions.t() | nil
        }

  field(:barcode, as: GoogleApi.WalletObjects.V1.Model.Barcode)
  field(:appLinkData, as: GoogleApi.WalletObjects.V1.Model.AppLinkData)
  field(:ticketType, as: GoogleApi.WalletObjects.V1.Model.LocalizedString)
  field(:state)
  field(:groupingInfo, as: GoogleApi.WalletObjects.V1.Model.GroupingInfo)
  field(:kind)
  field(:hexBackgroundColor)
  field(:infoModuleData, as: GoogleApi.WalletObjects.V1.Model.InfoModuleData)
  field(:ticketHolderName)
  field(:smartTapRedemptionValue)
  field(:classId)
  field(:imageModulesData, as: GoogleApi.WalletObjects.V1.Model.ImageModuleData, type: :list)
  field(:merchantLocations, as: GoogleApi.WalletObjects.V1.Model.MerchantLocation, type: :list)
  field(:version)
  field(:hasUsers)
  field(:locations, as: GoogleApi.WalletObjects.V1.Model.LatLongPoint, type: :list)
  field(:notifyPreference)
  field(:textModulesData, as: GoogleApi.WalletObjects.V1.Model.TextModuleData, type: :list)
  field(:linksModuleData, as: GoogleApi.WalletObjects.V1.Model.LinksModuleData)
  field(:ticketNumber)
  field(:messages, as: GoogleApi.WalletObjects.V1.Model.Message, type: :list)
  field(:reservationInfo, as: GoogleApi.WalletObjects.V1.Model.EventReservationInfo)
  field(:heroImage, as: GoogleApi.WalletObjects.V1.Model.Image)
  field(:seatInfo, as: GoogleApi.WalletObjects.V1.Model.EventSeat)
  field(:hasLinkedDevice)
  field(:linkedObjectIds, type: :list)
  field(:disableExpirationNotification)
  field(:passConstraints, as: GoogleApi.WalletObjects.V1.Model.PassConstraints)
  field(:rotatingBarcode, as: GoogleApi.WalletObjects.V1.Model.RotatingBarcode)
  field(:classReference, as: GoogleApi.WalletObjects.V1.Model.EventTicketClass)

  field(:valueAddedModuleData,
    as: GoogleApi.WalletObjects.V1.Model.ValueAddedModuleData,
    type: :list
  )

  field(:linkedOfferIds, type: :list)
  field(:validTimeInterval, as: GoogleApi.WalletObjects.V1.Model.TimeInterval)
  field(:id)
  field(:faceValue, as: GoogleApi.WalletObjects.V1.Model.Money)
  field(:saveRestrictions, as: GoogleApi.WalletObjects.V1.Model.SaveRestrictions)
end

defimpl Poison.Decoder, for: GoogleApi.WalletObjects.V1.Model.EventTicketObject do
  def decode(value, options) do
    GoogleApi.WalletObjects.V1.Model.EventTicketObject.decode(value, options)
  end
end

defimpl Poison.Encoder, for: GoogleApi.WalletObjects.V1.Model.EventTicketObject do
  def encode(value, options) do
    GoogleApi.Gax.ModelBase.encode(value, options)
  end
end
